/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mentaproduto.action;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import mentaproduto.persistencia.PerProduto;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import mentaproduto.exception.ValidarException;
import mentaproduto.vo.VOProduto;
import org.apache.commons.fileupload.FileItem;
import org.mentawai.core.ApplicationManager;
import org.mentawai.core.BaseAction;
/**
 *
 * @author Administrador
 */
public class ActCadProduto extends BaseAction {

    private int codigo = 0;
    private String nome;
    private String descricao;
    private Double preco;
    private Double precoPromocional;
    private String foto;
    private boolean promocao;
    private int estoque = 0;
    private String listaProduto;
    private VOProduto vo;
    private PerProduto pp;
    private ArrayList<VOProduto> voProdutos;

    @Override
    public String execute() {
        try {
            pp = new PerProduto();
            voProdutos = pp.consularProduto();

            listaProduto = "<table style=\"text-align: left; width: 293px;\" border=\"1\" cellpadding=\"2\" cellspacing=\"2\"><tbody> ";
            for (int i = 0; i < voProdutos.size(); i++) {
                listaProduto = listaProduto +
                        "<tr>" +
                        "<td style=\"vertical-align: top; width: 64px;\">" + voProdutos.get(i).getCodigo() + "<br></td>" +
                        "<td style=\"vertical-align: top; width: 211px;\">" + voProdutos.get(i).getNome() + "</td>" +
                        "</tr>";
            }
            listaProduto = listaProduto + "</tbody></table>";
            output.setValue("listaProdutos", listaProduto);

            return SUCCESS;

        } catch (ValidarException ex) {
            Logger.getLogger(ActCadProduto.class.getName()).log(Level.SEVERE, null, ex);
            return ERROR;



        }

    }

    public String salvarProduto() {
        try {
            if (!input.getString("txtCodigo").isEmpty()) {
                codigo = input.getInt("txtCodigo");
            } else {
                codigo = 0;
            }
            nome = input.getString("txtNome");
            descricao = input.getString("txtDescricao");
            preco = Double.parseDouble(input.getString("txtPreco"));
            precoPromocional = input.getDouble("txtPrecoPromocional");
            FileItem item = (FileItem) input.getValue("txtFoto");


            File fileDefault = new File("/home/rodrigo/Nworksapce/MentaProduto/web/img/"+ item.getName());
            foto = fileDefault.getName();
            if (!item.getContentType().startsWith("image")) {
                JOptionPane.showMessageDialog(null, "Somente imagens", "Erro", JOptionPane.ERROR_MESSAGE);
                return ERROR;
            }
            item.write(fileDefault);
            if (!input.getString("txtEstoque").isEmpty()) {
                estoque = input.getInt("txtEstoque");
            } else {
                estoque = 0;
            }
            if (input.getString("ckPromocao") == null) {
                promocao = false;
            } else {
                promocao = true;
            }

            vo = new VOProduto();
            pp = new PerProduto();

            vo.setCodigo(codigo);
            vo.setNome(nome);
            vo.setDescricao(descricao);
            vo.setFoto(foto);
            vo.setPreco(preco);
            vo.setPrecoPromocional(precoPromocional);
            vo.setPromocao(promocao);
            vo.setEstoque(estoque);

            if (codigo == 0) {
                if (pp.inserirProduto(vo)) {
                    JOptionPane.showMessageDialog(null, "Produto cadastrado com sucesso", "Produto", JOptionPane.INFORMATION_MESSAGE);
                    limpar();
                    execute();
                    return SUCCESS;
                } else {
                    return ERROR;
                }

            } else if (codigo > 0) {

                if (pp.alterarProduto(vo)) {
                    JOptionPane.showMessageDialog(null, "Produto alterado com sucesso", "Funcionario", JOptionPane.INFORMATION_MESSAGE);
                    limpar();
                    execute();
                    return SUCCESS;
                } else {
                    return ERROR;
                }

            }
            return SUCCESS;
        } catch (ValidarException e) {
            JOptionPane.showMessageDialog(null, e.getMessage(), "Erro",
                    JOptionPane.ERROR_MESSAGE);
            return ERROR;
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage(), "Erro",
                    JOptionPane.ERROR_MESSAGE);
            return ERROR;
        }

    }

    public String consultarProduto() {
        if (input.getValue("txtCodigo") != null) {
            codigo = input.getInt("txtCodigo");
        } else {
            codigo = 0;
        }

        vo = new VOProduto();
        pp = new PerProduto();

        vo.setCodigo(codigo);

        vo = pp.consultarProduto(codigo);

        if (vo != null) {
            input.setValue("txtCodigo", vo.getCodigo());
            input.setValue("txtNome", vo.getNome());
            input.setValue("txtDescricao", vo.getDescricao());
            input.setValue("txtPreco", vo.getPreco());
            input.setValue("txtPrecoPromocional", vo.getPrecoPromocional());
    //        input.setValue("txtUrl", vo.getFoto());
            output.setValue("caminhoImagem", vo.getFoto());
            input.setValue("txtEstoque", vo.getEstoque());
            if (vo.isPromocao()) {
                output.setValue("ckPromocao", true);
            } else {
                output.setValue("ckPromocao", false);
            }
        } else {
            JOptionPane.showMessageDialog(null, "Produto não Encontrado", "Erro",
                    JOptionPane.INFORMATION_MESSAGE);
            limpar();
        }


        execute();

        return SUCCESS;
    }

    public String consultarProdutoNome() {

        nome = input.getString("txtNome");
        descricao = input.getString("txtDescricao");
        
        vo = new VOProduto();
        pp = new PerProduto();

        vo.setNome(nome);
        vo.setDescricao(descricao);
        
        List<VOProduto> lista = pp.consultarProduto(vo);

        if (lista == null)
            return ERROR;

        output.setValue("listaProdutos", lista);

        return SUCCESS;

    }

    public void limpar() {}
 
}
